#pragma once

#include <list>
#include "LevelDescriptor.h"
#include "PlayerInfo.h"
#include "EnemyAInfo.h"
#include "PowerUpInfo.h"
#include "TileWorldInfo.h"

namespace game_engine { namespace data_format
{

/*!
 * \class FirstLevelDescriptor
 * \brief 
 */
class FirstLevelDescriptor : public LevelDescriptor
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
    TileWorldInfo tileWorldInfo;
    string animFilename;
    PlayerInfo playerInfo;
    list<EnemyAInfo> enemyAList;
    list<PowerUpInfo> killPowerupList;
    list<PowerUpInfo> speedPowerupList;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    FirstLevelDescriptor(void);
    virtual ~FirstLevelDescriptor(void);

    // Others
    void parse(const string &filename);

    // Getters
    const TileWorldInfo& getTileWorldInfo(void) const;
    const string& getAnimFilename(void) const;
    const PlayerInfo& getPlayerInfo(void) const;
    const list<EnemyAInfo>& getEnemyAList(void) const;

};

}}
